package com.hdu.degrete.degrate;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

@Target(ElementType.METHOD)
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
public @interface Degrate {
    /**
     * 降级时间
     */
    long degrateTime();
    /**
     * 降级时间单位
     */
    TimeUnit timeUnit();
    /**
     * 降级类型
     */
    CircuitBreaker.DegrateType degrateType();
    /**
     * 失败率达到多少后熔断
     */
    double failRate();
    /**
     * 如果指定降级模式为 CUSTOM_RESULT, 需要指定返回结果的handler
     */
    Class<?> customResultHandler() default DefaultCustomResultHandler.class;
    /**
     * 如果指定降级模式为 CUSTOM_RESULT, 需要指定返回结果的方法
     */
    String methodName() default "getCustomResult";
}
